﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using turnos.core.modelo;
using turnos.core.util;

namespace turnos.escritorio
{
    public partial class frmVisorMatriz : Form
    {
        private MatrizDeTurnos _matriz;

        public MatrizDeTurnos MatrizSeleccionada
        {
            get { return _matriz; }
            set { _matriz = value; }
        }

        public frmVisorMatriz()
        {
            InitializeComponent();
        }

        private void btnAgregarMatriz_Click(object sender, EventArgs e)
        {
            frmAltaDeMatriz frm = new frmAltaDeMatriz();
            frm.ShowDialog();
            cargarGrilla();
        }

        private void frmVisorMatriz_Load(object sender, EventArgs e)
        {
            Modelo.TurnosModelo.ConfigurarDGV(dgvMatrices, columnas_matriz());
            cargarGrilla();
            seleccionaMatriz();
        }

        private void cargarGrilla()
        {
            dgvMatrices.DataSource = Modelo.TurnosModelo.TurnosC.TraerMatrices();
        }

        private List<DataGridViewColumn> columnas_matriz()
        {
            List<DataGridViewColumn> retorno = new List<DataGridViewColumn>();
            DataGridViewColumn c = new DataGridViewTextBoxColumn();
            c.Name = "Identificacion";
            c.DataPropertyName = "IdMatriz";
            c.Visible = false;
            retorno.Add(c);

            DataGridViewColumn c1 = new DataGridViewTextBoxColumn();
            c1.Name = "Fecha";
            c1.DataPropertyName = "Fecha";

            retorno.Add(c1);

            DataGridViewColumn c2 = new DataGridViewTextBoxColumn();
            c2.Name = "Hora Inicio";
            c2.DataPropertyName = "HoraInicio";
            c2.DefaultCellStyle.Format = "hh:mm";

            retorno.Add(c2);

            DataGridViewColumn c3 = new DataGridViewTextBoxColumn();
            c3.Name = "Cant Puestos";
            c3.DataPropertyName = "CantPuestos";

            retorno.Add(c3);

            DataGridViewColumn c4 = new DataGridViewTextBoxColumn();
            c4.Name = "Cant Horas Laborales";
            c4.DataPropertyName = "CantHorasLab";

            retorno.Add(c4);


            DataGridViewColumn c5 = new DataGridViewTextBoxColumn();
            c5.Name = "Tiempo Estimado Atención";
            c5.DataPropertyName = "TiempoMinimo";

            retorno.Add(c5);

            DataGridViewColumn c6 = new DataGridViewTextBoxColumn();
            c6.Name = "Cantidad Turnos Jornada";
            c6.DataPropertyName = "CantidadTurnosJornada";

            retorno.Add(c6);


            return retorno;
        }

        private void btnEliminarMatriz_Click(object sender, EventArgs e)
        {
            try
            {
                if (dgvMatrices.CurrentRow == null)
                    MessageBox.Show(turnosCts.DEBE_SELECCIONAR_UN_ELEMENTO);
                else
                    if (MessageBox.Show("¿Está seguro?", "Confirmar", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        seleccionaMatriz();
                        Modelo.TurnosModelo.TurnosC.EliminarMatriz(MatrizSeleccionada);
                        cargarGrilla();
                    }
            }
            catch (Exception ex)
            {
                MessageBox.Show("No se puede eliminar la matriz ya que posee agenda vinculada", "Problemas");
            }
            
        }
        private void seleccionaMatriz()
        {
            if (dgvMatrices.CurrentRow != null)
            {
                DateTime fecha = DateTime.Parse(dgvMatrices.CurrentRow.Cells[1].Value.ToString());
                MatrizSeleccionada = Modelo.TurnosModelo.TurnosC.TraerMatrizPorFecha(fecha);
                txtCantPuestos.Text = MatrizSeleccionada.CantPuestos.ToString();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                if (dgvMatrices.CurrentRow == null)
                    MessageBox.Show(turnosCts.DEBE_SELECCIONAR_UN_ELEMENTO);
                else
                    if (MessageBox.Show("¿Está seguro de generar la agenda?", "Confirmar", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        seleccionaMatriz();
                        Modelo.TurnosModelo.TurnosC.GenerarAgenda(MatrizSeleccionada, Modelo.TurnosModelo.Usuario.Usuario);
                        MessageBox.Show("Se generó la agenda correctamente", "Confirmación");
                    }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problemas al generar la agenda: " + ex.Message, "Problema");
            }
            
        }

        private void dgvMatrices_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            seleccionaMatriz();
            
        }

        private void btnActualizaPuestos_Click(object sender, EventArgs e)
        {
            try
            {
                MatrizSeleccionada.CantPuestos = byte.Parse(txtCantPuestos.Text);
                Modelo.TurnosModelo.TurnosC.ActualizarCantPuestosMatriz(MatrizSeleccionada, Modelo.TurnosModelo.Usuario.Usuario);
                MessageBox.Show("Se actualizó correctamente", "Confirmación");
                cargarGrilla();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problemas al actualizar:" + ex.Message, "Error");
            }
            

        }
    }
}
